home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / GRAPHICS / COMMON.ZIP / CRC.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-11  |  7.5 KB  |  189 lines

  1.  
  2. /* crctab calculated by Mark G. Mendel, Network Systems Corporation */
  3. unsigned short crctab[256] = {
  4. 0x0000u,  0x1021u,  0x2042u,  0x3063u,  0x4084u,  0x50a5u,  0x60c6u,
  5. 0x70e7u,
  6. 0x8108u,  0x9129u,  0xa14au,  0xb16bu,  0xc18cu,  0xd1adu,  0xe1ceu,
  7. 0xf1efu,
  8. 0x1231u,  0x0210u,  0x3273u,  0x2252u,  0x52b5u,  0x4294u,  0x72f7u,
  9. 0x62d6u,
  10. 0x9339u,  0x8318u,  0xb37bu,  0xa35au,  0xd3bdu,  0xc39cu,  0xf3ffu,
  11. 0xe3deu,
  12. 0x2462u,  0x3443u,  0x0420u,  0x1401u,  0x64e6u,  0x74c7u,  0x44a4u,
  13. 0x5485u,
  14. 0xa56au,  0xb54bu,  0x8528u,  0x9509u,  0xe5eeu,  0xf5cfu,  0xc5acu,
  15. 0xd58du,
  16. 0x3653u,  0x2672u,  0x1611u,  0x0630u,  0x76d7u,  0x66f6u,  0x5695u,
  17. 0x46b4u,
  18. 0xb75bu,  0xa77au,  0x9719u,  0x8738u,  0xf7dfu,  0xe7feu,  0xd79du,
  19. 0xc7bcu,
  20. 0x48c4u,  0x58e5u,  0x6886u,  0x78a7u,  0x0840u,  0x1861u,  0x2802u,
  21. 0x3823u,
  22. 0xc9ccu,  0xd9edu,  0xe98eu,  0xf9afu,  0x8948u,  0x9969u,  0xa90au,
  23. 0xb92bu,
  24. 0x5af5u,  0x4ad4u,  0x7ab7u,  0x6a96u,  0x1a71u,  0x0a50u,  0x3a33u,
  25. 0x2a12u,
  26. 0xdbfdu,  0xcbdcu,  0xfbbfu,  0xeb9eu,  0x9b79u,  0x8b58u,  0xbb3bu,
  27. 0xab1au,
  28. 0x6ca6u,  0x7c87u,  0x4ce4u,  0x5cc5u,  0x2c22u,  0x3c03u,  0x0c60u,
  29. 0x1c41u,
  30. 0xedaeu,  0xfd8fu,  0xcdecu,  0xddcdu,  0xad2au,  0xbd0bu,  0x8d68u,
  31. 0x9d49u,
  32. 0x7e97u,  0x6eb6u,  0x5ed5u,  0x4ef4u,  0x3e13u,  0x2e32u,  0x1e51u,
  33. 0x0e70u,
  34. 0xff9fu,  0xefbeu,  0xdfddu,  0xcffcu,  0xbf1bu,  0xaf3au,  0x9f59u,
  35. 0x8f78u,
  36. 0x9188u,  0x81a9u,  0xb1cau,  0xa1ebu,  0xd10cu,  0xc12du,  0xf14eu,
  37. 0xe16fu,
  38. 0x1080u,  0x00a1u,  0x30c2u,  0x20e3u,  0x5004u,  0x4025u,  0x7046u,
  39. 0x6067u,
  40. 0x83b9u,  0x9398u,  0xa3fbu,  0xb3dau,  0xc33du,  0xd31cu,  0xe37fu,
  41. 0xf35eu,
  42. 0x02b1u,  0x1290u,  0x22f3u,  0x32d2u,  0x4235u,  0x5214u,  0x6277u,
  43. 0x7256u,
  44. 0xb5eau,  0xa5cbu,  0x95a8u,  0x8589u,  0xf56eu,  0xe54fu,  0xd52cu,
  45. 0xc50du,
  46. 0x34e2u,  0x24c3u,  0x14a0u,  0x0481u,  0x7466u,  0x6447u,  0x5424u,
  47. 0x4405u,
  48. 0xa7dbu,  0xb7fau,  0x8799u,  0x97b8u,  0xe75fu,  0xf77eu,  0xc71du,
  49. 0xd73cu,
  50. 0x26d3u,  0x36f2u,  0x0691u,  0x16b0u,  0x6657u,  0x7676u,  0x4615u,
  51. 0x5634u,
  52. 0xd94cu,  0xc96du,  0xf90eu,  0xe92fu,  0x99c8u,  0x89e9u,  0xb98au,
  53. 0xa9abu,
  54. 0x5844u,  0x4865u,  0x7806u,  0x6827u,  0x18c0u,  0x08e1u,  0x3882u,
  55. 0x28a3u,
  56. 0xcb7du,  0xdb5cu,  0xeb3fu,  0xfb1eu,  0x8bf9u,  0x9bd8u,  0xabbbu,
  57. 0xbb9au,
  58. 0x4a75u,  0x5a54u,  0x6a37u,  0x7a16u,  0x0af1u,  0x1ad0u,  0x2ab3u,
  59. 0x3a92u,
  60. 0xfd2eu,  0xed0fu,  0xdd6cu,  0xcd4du,  0xbdaau,  0xad8bu,  0x9de8u,
  61. 0x8dc9u,
  62. 0x7c26u,  0x6c07u,  0x5c64u,  0x4c45u,  0x3ca2u,  0x2c83u,  0x1ce0u,
  63. 0x0cc1u,
  64. 0xef1fu,  0xff3eu,  0xcf5du,  0xdf7cu,  0xaf9bu,  0xbfbau,  0x8fd9u,
  65. 0x9ff8u,
  66. 0x6e17u,  0x7e36u,  0x4e55u,  0x5e74u,  0x2e93u,  0x3eb2u,  0x0ed1u,
  67. 0x1ef0u
  68. };
  69.  
  70.  
  71.  
  72. unsigned long cr3tab[] = { /* CRC polynomial 0xedb88320 */
  73. 0x00000000ul, 0x77073096ul, 0xee0e612cul, 0x990951baul, 0x076dc419ul,
  74. 0x706af48ful, 0xe963a535ul, 0x9e6495a3ul,
  75. 0x0edb8832ul, 0x79dcb8a4ul, 0xe0d5e91eul, 0x97d2d988ul, 0x09b64c2bul,
  76. 0x7eb17cbdul, 0xe7b82d07ul, 0x90bf1d91ul,
  77. 0x1db71064ul, 0x6ab020f2ul, 0xf3b97148ul, 0x84be41deul, 0x1adad47dul,
  78. 0x6ddde4ebul, 0xf4d4b551ul, 0x83d385c7ul,
  79. 0x136c9856ul, 0x646ba8c0ul, 0xfd62f97aul, 0x8a65c9ecul, 0x14015c4ful,
  80. 0x63066cd9ul, 0xfa0f3d63ul, 0x8d080df5ul,
  81. 0x3b6e20c8ul, 0x4c69105eul, 0xd56041e4ul, 0xa2677172ul, 0x3c03e4d1ul,
  82. 0x4b04d447ul, 0xd20d85fdul, 0xa50ab56bul,
  83. 0x35b5a8faul, 0x42b2986cul, 0xdbbbc9d6ul, 0xacbcf940ul, 0x32d86ce3ul,
  84. 0x45df5c75ul, 0xdcd60dcful, 0xabd13d59ul,
  85. 0x26d930acul, 0x51de003aul, 0xc8d75180ul, 0xbfd06116ul, 0x21b4f4b5ul,
  86. 0x56b3c423ul, 0xcfba9599ul, 0xb8bda50ful,
  87. 0x2802b89eul, 0x5f058808ul, 0xc60cd9b2ul, 0xb10be924ul, 0x2f6f7c87ul,
  88. 0x58684c11ul, 0xc1611dabul, 0xb6662d3dul,
  89. 0x76dc4190ul, 0x01db7106ul, 0x98d220bcul, 0xefd5102aul, 0x71b18589ul,
  90. 0x06b6b51ful, 0x9fbfe4a5ul, 0xe8b8d433ul,
  91. 0x7807c9a2ul, 0x0f00f934ul, 0x9609a88eul, 0xe10e9818ul, 0x7f6a0dbbul,
  92. 0x086d3d2dul, 0x91646c97ul, 0xe6635c01ul,
  93. 0x6b6b51f4ul, 0x1c6c6162ul, 0x856530d8ul, 0xf262004eul, 0x6c0695edul,
  94. 0x1b01a57bul, 0x8208f4c1ul, 0xf50fc457ul,
  95. 0x65b0d9c6ul, 0x12b7e950ul, 0x8bbeb8eaul, 0xfcb9887cul, 0x62dd1ddful,
  96. 0x15da2d49ul, 0x8cd37cf3ul, 0xfbd44c65ul,
  97. 0x4db26158ul, 0x3ab551ceul, 0xa3bc0074ul, 0xd4bb30e2ul, 0x4adfa541ul,
  98. 0x3dd895d7ul, 0xa4d1c46dul, 0xd3d6f4fbul,
  99. 0x4369e96aul, 0x346ed9fcul, 0xad678846ul, 0xda60b8d0ul, 0x44042d73ul,
  100. 0x33031de5ul, 0xaa0a4c5ful, 0xdd0d7cc9ul,
  101. 0x5005713cul, 0x270241aaul, 0xbe0b1010ul, 0xc90c2086ul, 0x5768b525ul,
  102. 0x206f85b3ul, 0xb966d409ul, 0xce61e49ful,
  103. 0x5edef90eul, 0x29d9c998ul, 0xb0d09822ul, 0xc7d7a8b4ul, 0x59b33d17ul,
  104. 0x2eb40d81ul, 0xb7bd5c3bul, 0xc0ba6cadul,
  105. 0xedb88320ul, 0x9abfb3b6ul, 0x03b6e20cul, 0x74b1d29aul, 0xead54739ul,
  106. 0x9dd277aful, 0x04db2615ul, 0x73dc1683ul,
  107. 0xe3630b12ul, 0x94643b84ul, 0x0d6d6a3eul, 0x7a6a5aa8ul, 0xe40ecf0bul,
  108. 0x9309ff9dul, 0x0a00ae27ul, 0x7d079eb1ul,
  109. 0xf00f9344ul, 0x8708a3d2ul, 0x1e01f268ul, 0x6906c2feul, 0xf762575dul,
  110. 0x806567cbul, 0x196c3671ul, 0x6e6b06e7ul,
  111. 0xfed41b76ul, 0x89d32be0ul, 0x10da7a5aul, 0x67dd4accul, 0xf9b9df6ful,
  112. 0x8ebeeff9ul, 0x17b7be43ul, 0x60b08ed5ul,
  113. 0xd6d6a3e8ul, 0xa1d1937eul, 0x38d8c2c4ul, 0x4fdff252ul, 0xd1bb67f1ul,
  114. 0xa6bc5767ul, 0x3fb506ddul, 0x48b2364bul,
  115. 0xd80d2bdaul, 0xaf0a1b4cul, 0x36034af6ul, 0x41047a60ul, 0xdf60efc3ul,
  116. 0xa867df55ul, 0x316e8eeful, 0x4669be79ul,
  117. 0xcb61b38cul, 0xbc66831aul, 0x256fd2a0ul, 0x5268e236ul, 0xcc0c7795ul,
  118. 0xbb0b4703ul, 0x220216b9ul, 0x5505262ful,
  119. 0xc5ba3bbeul, 0xb2bd0b28ul, 0x2bb45a92ul, 0x5cb36a04ul, 0xc2d7ffa7ul,
  120. 0xb5d0cf31ul, 0x2cd99e8bul, 0x5bdeae1dul,
  121. 0x9b64c2b0ul, 0xec63f226ul, 0x756aa39cul, 0x026d930aul, 0x9c0906a9ul,
  122. 0xeb0e363ful, 0x72076785ul, 0x05005713ul,
  123. 0x95bf4a82ul, 0xe2b87a14ul, 0x7bb12baeul, 0x0cb61b38ul, 0x92d28e9bul,
  124. 0xe5d5be0dul, 0x7cdcefb7ul, 0x0bdbdf21ul,
  125. 0x86d3d2d4ul, 0xf1d4e242ul, 0x68ddb3f8ul, 0x1fda836eul, 0x81be16cdul,
  126. 0xf6b9265bul, 0x6fb077e1ul, 0x18b74777ul,
  127. 0x88085ae6ul, 0xff0f6a70ul, 0x66063bcaul, 0x11010b5cul, 0x8f659efful,
  128. 0xf862ae69ul, 0x616bffd3ul, 0x166ccf45ul,
  129. 0xa00ae278ul, 0xd70dd2eeul, 0x4e048354ul, 0x3903b3c2ul, 0xa7672661ul,
  130. 0xd06016f7ul, 0x4969474dul, 0x3e6e77dbul,
  131. 0xaed16a4aul, 0xd9d65adcul, 0x40df0b66ul, 0x37d83bf0ul, 0xa9bcae53ul,
  132. 0xdebb9ec5ul, 0x47b2cf7ful, 0x30b5ffe9ul,
  133. 0xbdbdf21cul, 0xcabac28aul, 0x53b39330ul, 0x24b4a3a6ul, 0xbad03605ul,
  134. 0xcdd70693ul, 0x54de5729ul, 0x23d967bful,
  135. 0xb3667a2eul, 0xc4614ab8ul, 0x5d681b02ul, 0x2a6f2b94ul, 0xb40bbe37ul,
  136. 0xc30c8ea1ul, 0x5a05df1bul, 0x2d02ef8dul
  137. };
  138.  
  139. /*
  140.  * updcrc macro derived from article Copyright (C) 1986 Stephen Satchell. 
  141.  *  NOTE: First argument must be in range 0 to 255.
  142.  *        Second argument is referenced twice.
  143.  * 
  144.  * Programmers may incorporate any or all code into their programs, 
  145.  * giving proper credit within the source. Publication of the 
  146.  * source routines is permitted so long as proper credit is given 
  147.  * to Stephen Satchell, Satchell Evaluations and Chuck Forsberg, 
  148.  * Omen Technology.
  149. */
  150.  
  151. extern unsigned short crctab[256];
  152. #define updcrc(cp, crc) ( crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ cp)
  153.  
  154. extern unsigned long cr3tab[]; /* CRC polynomial 0xedb88320 */
  155. #define UPDC32(b, c) (cr3tab[((int)c^b) & 0xffu]^((c >> 8) & 0x00FFFFFFul))
  156.  
  157. /* -------------------- calc_crc16() ------------------- January 10,1996 */
  158. unsigned short calc_crc16(char *s, unsigned int len)
  159. {
  160.    unsigned short crc=0;
  161.  
  162.    while ( len )
  163.       {
  164.         crc=updcrc((0377 & *s), crc);
  165.       s++;
  166.       len--;
  167.       }
  168.  
  169.    return crc;
  170.    
  171. }
  172.  
  173.  
  174. /* --------------------- calc_crc32() ------------------- January 10,1996 */
  175. unsigned long calc_crc32(char *s, unsigned int len)
  176. {
  177.    unsigned long crc=0;
  178.  
  179.    while ( len )
  180.       {
  181.         crc=UPDC32((0377 & *s), crc);
  182.       s++;
  183.       len--;
  184.       }
  185.  
  186.    return crc;
  187.    
  188. }
  189.